package com.wang.todoList.util;

import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.jwt.JWT;
import com.wang.todoList.constant.BaseConstant;
import io.swagger.models.auth.In;

import java.nio.charset.StandardCharsets;
import java.util.Date;

/**
 * @author Zifan
 * @date 2021年07月10日20:19
 */
public class JwtUtil {
    /**
     * 生成一个token
     */
    public static String createToken(Integer userId){
        //生成jwt
        return JWT.create()
                //设置失效日期为1天后
                .setPayload("expiryDate", DateUtil.offsetDay(new Date(), BaseConstant.JWT_FAILURE_DAY).toString())
                .setPayload("userId",userId)
                .setKey(BaseConstant.JWT_KEY.getBytes(StandardCharsets.UTF_8))
                .sign();
    }

    /**根据密钥校验token*/
    public static Boolean validationJwt(String jwt){
        return JWT.of(jwt).setKey(BaseConstant.JWT_KEY.getBytes()).verify();
    }

    /**
     * 判断jwt是否还在有效期
     * @return true：未失效 false：已经失效
     */
    public static Boolean jwtIsLate(String jwt){
        JWT target = JWT.of(jwt);
        String date = (String) target.getPayload("expiryDate");
        DateTime dateTime = new DateTime(date, DatePattern.NORM_DATETIME_FORMAT);
        return dateTime.isAfter(new Date());
    }

    public static Integer getUserId(String jwt){
        return (Integer) JWT.of(jwt).getPayload("userId");
    }
}
